package jmine.tec.utils.spring;

import java.util.Enumeration;
import java.util.Properties;

import org.springframework.beans.factory.FactoryBean;

/**
 * FactoryBean utilizada para gerar Properties com as propriedades passadas, a diferença entre declarar esse bean e um {@link Properties} no
 * spring está no fato de que o {@link Properties} vai ter as propriedades definidas no spring no <code>defaults</code> e com essa bean
 * factory as propriedades estarão diretamente no bean gerado. A criação dessa factory foi necessária pois o hibernate chama
 * {@link Properties#putAll(java.util.Map)} durante a configuracao da SessionFactory, e como as propriedades estão no default elas não são
 * adicionadas.
 * 
 * @created Oct 23, 2008
 * @author galmeida (Oct 23, 2008)
 */
public class PropertiesFactoryBean implements FactoryBean {
    private Properties properties = null;

    /**
     * Construtor.
     * 
     * @param properties propriedades.
     */
    public PropertiesFactoryBean(Properties properties) {
        this.properties = properties;
    }

    /**
     * Devolve um {@link Properties} com as propriedades passadas no contrutor.
     * 
     * @return um {@link Properties} com as propriedades passadas no contrutor.
     */
    public Object getObject() {
        Properties prop = new Properties();
        for (Enumeration<?> e = this.properties.propertyNames(); e.hasMoreElements();) {
            String key = (String) e.nextElement();
            prop.setProperty(key, this.properties.getProperty(key));
        }
        return prop;
    }

    /**
     * Devolve {@link Properties}.class
     * 
     * @return {@link Properties}.class
     */
    public Class<?> getObjectType() {
        return Properties.class;
    }

    /**
     * Devolve <code>false</code>.
     * 
     * @return <code>false</code>.
     */
    public boolean isSingleton() {
        return false;
    }

}
